package manager.modulo.clientefornecedor.dao;

import java.sql.SQLException;
import manager.auxiliares.MensagemExcessao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.LinkedList;
import manager.principal.fonte.JanelaLogin;
import manager.interfaces.InterfaceDao;

/**
 * Esta classe será utilizada para cadastra a entidade user no banco de dados
 *
 * @author Thiago
 */
public class PessoaJuridicaDao implements InterfaceDao {

    int idClienteFornecedor;
    String nomeFantasia;
    String razaoSocial;
    String cnpj;
    String responsavel;

    /**
     * Inicializando as variáveis
     */
    public PessoaJuridicaDao() {
        resetValues();
        idClienteFornecedor = 0;
    }

    public PessoaJuridicaDao(int newIdPartner) {
        resetValues();
        idClienteFornecedor = newIdPartner;
    }

    private void resetValues() {
        nomeFantasia = "";
        razaoSocial = "";
        cnpj = "";
        responsavel = "";
    }

    public void buscar(int idClienteFornecedorBuscado) {
        try {
            setIdClienteFornecedor(idClienteFornecedorBuscado);
            String sql = "SELECT * FROM pessoa_juridica WHERE id_cliente_fornecedor = ?";
            PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql);
            preparedStatement.setInt(1, idClienteFornecedorBuscado);
            ResultSet resultSet = preparedStatement.executeQuery();
            if (resultSet.first()) {
                nomeFantasia = resultSet.getString("tx_nome_fantasia");
                razaoSocial = resultSet.getString("tx_razao_social");
                cnpj = resultSet.getString("tx_cnpj");
                responsavel = resultSet.getString("tx_responsavel");
            }

            resultSet.close();
            preparedStatement.close();
        } catch (Exception e) {
            MensagemExcessao.mostrarMensagem(e, "Buscando Pessoas Jurídicas");
        }
    }

    public void inserir() throws SQLException {
        String sql = "INSERT INTO "
                + "pessoa_juridica"
                + " (tx_nome_fantasia,"
                + " tx_razao_social,"
                + " tx_cnpj,"
                + " tx_responsavel,"
                + " id_cliente_fornecedor) "
                + "VALUES"
                + " (?,"
                + " ?,"
                + " ?,"
                + " ?,"
                + " ?)";
        PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql);

        preparedStatement.setString(1, nomeFantasia);
        preparedStatement.setString(2, razaoSocial);
        preparedStatement.setString(3, cnpj);
        preparedStatement.setString(4, responsavel);
        preparedStatement.setInt(5, idClienteFornecedor);
        preparedStatement.executeUpdate();

        preparedStatement.close();
    }

    public void atualizar() throws SQLException {
        String sql = "UPDATE pessoa_juridica "
                + "SET "
                + " tx_nome_fantasia = ?, "
                + " tx_razao_social = ?, "
                + " tx_cnpj = ?, "
                + " tx_responsavel = ? "
                + "WHERE "
                + " id_cliente_fornecedor = ?";
        PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql);
        preparedStatement.setString(1, nomeFantasia);
        preparedStatement.setString(2, razaoSocial);
        preparedStatement.setString(3, cnpj);
        preparedStatement.setString(4, responsavel);
        preparedStatement.setInt(5, idClienteFornecedor);
        preparedStatement.executeUpdate();

        preparedStatement.close();
    }

    public void deletar() throws SQLException {
        String sql = "DELETE FROM pessoa_juridica WHERE id_cliente_fornecedor = ?";
        PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql);
        preparedStatement.setInt(1, idClienteFornecedor);
        preparedStatement.executeUpdate();

        preparedStatement.close();
    }

    public LinkedList<String> buscar(String opcao, String buscado, boolean limite) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public int getIdClienteFornecedor() {
        return idClienteFornecedor;
    }

    public void setIdClienteFornecedor(int idClienteFornecedor) {
        this.idClienteFornecedor = idClienteFornecedor;
    }

    public String getNomeFantasia() {
        return nomeFantasia;
    }

    public void setNomeFantasia(String nomeFantasia) {
        this.nomeFantasia = nomeFantasia;
    }

    public String getRazaoSocial() {
        return razaoSocial;
    }

    public void setRazaoSocial(String razaoSocial) {
        this.razaoSocial = razaoSocial;
    }

    public String getCnpj() {
        return cnpj;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }

    public String getResponsavel() {
        return responsavel;
    }

    public void setResponsavel(String responsavel) {
        this.responsavel = responsavel;
    }
}
